#!/usr/bin/python

# Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
# for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file.

"""
Android buildbot steps.
"""

import os
import os.path
import re
import sys

import bot

ANDROID_BUILDER = r'vm-android-(linux|mac|win)'

def AndroidConfig(name, is_buildbot):
  """Returns info for the current buildbot based on the name of the builder.

  Currently, this is just:
  - mode: always "release" (for now)
  - system: "linux", "mac", or "win"
  """
  android_pattern = re.match(ANDROID_BUILDER, name)
  if not android_pattern:
    return None

  system = android_pattern.group(1)
  if system == 'win': system = 'windows'

  return bot.BuildInfo('none', 'vm', 'release', system, checked=True)


def AndroidSteps(build_info):
  # TODO(efortuna): Here's where we'll run tests.
  #bot.RunTest('android', build_info, ['android'])
  pass

def BuildAndroid(build_info):
  """
  Builds the android target.

  - build_info: the buildInfo object, containing information about what sort of
      build and test to be run.
  """
  with bot.BuildStep('Build Android'):
    # TODO(vsm): A temporary hack until we figure out why incremental builds are
    # broken on Android.
    if os.path.exists('./out/lastHooksTargetOS.txt'):
      os.remove('./out/lastHooksTargetOS.txt')
    targets = ['runtime']
    args = [sys.executable, './tools/build.py',
            '--arch=' + build_info.arch,
            '--mode=' + build_info.mode,
            '--os=android'] + targets
    print 'Building Android: %s' % (' '.join(args))
    bot.RunProcess(args)

if __name__ == '__main__':
  bot.RunBot(AndroidConfig, AndroidSteps, build_step=BuildAndroid)
